/**
 * 会话相关方法
 */

/**
 * 判断输入值经过 JSON 解析后是否合法，且为对象类型
 * @param value 
 * @returns 
 */
export function isObjectJson(value: any): boolean {
  if (typeof value !== 'string') {
    return false;
  }

  try {
    const obj = JSON.parse(value);

    return typeof obj === 'object';
  } catch(e) {
    return false;
  }
};

/**
 * 生成 messageId
 * 直接复制的 commonDataClass.chatRoom.createMessageID()
 * @returns 
 */
export function createMessageID() {
  const s = [];
  const hexDigits = '0123456789abcdef';
  for (let i = 0; i < 36; i++) {
    s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
  };
  s[14] = '4'; // bits 12-15 of the time_hi_and_version field to 0010
  s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
  s[8] = s[13] = s[18] = s[23] = '-';
  return s.join('');
};

/**
 * 通过链接获取 Blob 数据
 * @param url 
 * @param cb 
 */
export function getBlobFromUrl(url: string, cb: (response: Blob) => void) {
  const xhr = new XMLHttpRequest();
  xhr.open('get', url, true);
  xhr.responseType = 'blob';
  xhr.onload = function() {
    if (this.status === 200) {
      if (cb) cb(this.response);
    }
  };
  xhr.send();
};

/**
 * 将 Blob 数据下载为文件
 * @param blob 
 * @param fileName 
 */
export function downFileBlob(blob: Blob, fileName: string) {
  if ((window.navigator as any).msSaveOrOpenBlob) {
    (navigator as any).msSaveBlob(blob, fileName);
  } else {
    const link = document.createElement('a');
    link.href = window.URL.createObjectURL(blob);
    link.download = fileName;
    link.click();
    window.URL.revokeObjectURL(link.href);
  }
}

export default {
  isObjectJson,
  createMessageID,
  getBlobFromUrl,
  downFileBlob,
};
